const { app, BrowserWindow, ipcMain } = require('electron');
const path = require('path');

const isDev = process.env.NODE_ENV === 'development';

// 保持对window对象的全局引用
let mainWindow;

function createWindow() {
  // 创建浏览器窗口
  mainWindow = new BrowserWindow({
    width: 1200,
    height: 800,
    webPreferences: {
      nodeIntegration: false, // 禁用nodeIntegration以提高安全性
      contextIsolation: true, // 启用上下文隔离
      sandbox: false, // 禁用沙箱以支持文件下载
      preload: path.join(__dirname, 'preload.js'), // 预加载脚本
      webviewTag: true, // 启用webview标签
      allowRunningInsecureContent: false,
      experimentalFeatures: false
    }
  });

  // 加载应用
  if (isDev) {
    // 开发环境：增加服务器就绪检测
    const retryLoad = () => {
      mainWindow.loadURL('http://localhost:5173/').catch(err => {
        console.error('Vite server not ready, retrying...', err);
        setTimeout(retryLoad, 1000);
      });
    };
    retryLoad();
    // 打开开发者工具
    mainWindow.webContents.openDevTools();
  } else {
    // 生产环境：加载打包后的文件
    mainWindow.loadFile(path.join(__dirname, '../renderer/index.html'));
  }

  // 窗口关闭事件
  mainWindow.on('closed', () => {
    mainWindow = null;
  });

  // 监听渲染进程就绪事件
  ipcMain.on('renderer-ready', () => {
    console.log('Renderer process is ready');
  });
}

// 应用就绪事件
app.whenReady().then(() => {
  createWindow();

  // 开发环境下安装electron-reloader
  if (isDev) {
    try {
      require('electron-reloader')(module, {
        debug: true,
        watchRenderer: false
      });
    } catch (err) {
      console.error('Hot reloader error:', err);
    }
  }
});

// 所有窗口关闭时退出应用
app.on('window-all-closed', () => {
  if (process.platform !== 'darwin') {
    app.quit();
  }
});

// macOS激活事件
app.on('activate', () => {
  if (BrowserWindow.getAllWindows().length === 0) {
    createWindow();
  }
});

// IPC通信处理
ipcMain.handle('ping', () => 'pong');

// 安全加载外部脚本
ipcMain.handle('load-external-script', async (event, { url }) => {
  const { session } = require('electron');
  const script = await session.defaultSession.downloadURL(url);
  return script;
});